{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.6.0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(360,)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import cv2\n",
    "print(cv2.__version__)\n",
    "\n",
    "a =  np.fromfile(\"/mnt/data-3/huajiang.liu/dumpfile/dumpfile3/1662529530485_src_start_x_ptr.bin\", dtype=np.float32)\n",
    "# img = cv2.imread(\"/mnt/data-3/huajiang.liu/tmp/1650507133474_bev_image.png\")\n",
    "# img = cv2.normalize(img,None,0,255,cv2.NORM_MINMAX)\n",
    "# cv2.imshow('img_window',img)  #显示图片,[图片窗口名字，图片]\n",
    "a.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-68.51172, 27.0)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.min(),a.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-6.85117188e+01, -6.65117188e+01, -6.45117188e+01, -6.25117188e+01,\n",
       "       -6.05117188e+01, -5.85117188e+01, -5.65117188e+01, -5.45117188e+01,\n",
       "       -5.25117188e+01, -4.85117188e+01, -4.65117188e+01, -4.45117188e+01,\n",
       "       -4.25117188e+01, -4.05117188e+01, -3.85117188e+01, -3.65117188e+01,\n",
       "       -3.45117188e+01, -3.25117188e+01, -2.85117188e+01, -2.65117188e+01,\n",
       "       -2.45117188e+01, -2.25117188e+01, -2.05117188e+01, -1.85117188e+01,\n",
       "       -1.65117188e+01, -1.45117188e+01, -1.25117188e+01, -8.51171875e+00,\n",
       "       -6.51171875e+00, -4.51171875e+00, -2.51171875e+00, -5.11718750e-01,\n",
       "        1.48828125e+00,  3.48828125e+00,  5.48828125e+00,  7.48828125e+00,\n",
       "       -6.79609375e+01, -6.59609375e+01, -6.39609375e+01, -6.19609375e+01,\n",
       "       -5.99609375e+01, -5.79609375e+01, -5.59609375e+01, -5.39609375e+01,\n",
       "       -5.19609375e+01, -4.79609375e+01, -4.59609375e+01, -4.39609375e+01,\n",
       "       -4.19609375e+01, -3.99609375e+01, -3.79609375e+01, -3.59609375e+01,\n",
       "       -3.39609375e+01, -3.19609375e+01, -2.79609375e+01, -2.59609375e+01,\n",
       "       -2.39609375e+01, -2.19609375e+01, -1.99609375e+01, -1.79609375e+01,\n",
       "       -1.59609375e+01, -1.39609375e+01, -1.19609375e+01, -7.96093750e+00,\n",
       "       -5.96093750e+00, -3.96093750e+00, -1.96093750e+00,  3.90625000e-02,\n",
       "        2.03906250e+00,  4.03906250e+00,  6.03906250e+00,  8.03906250e+00,\n",
       "        1.10000000e+01,  1.30000000e+01,  1.50000000e+01,  1.70000000e+01,\n",
       "        1.90000000e+01,  2.10000000e+01,  2.30000000e+01,  2.50000000e+01,\n",
       "        2.70000000e+01, -1.29648438e+01, -1.09648438e+01, -8.96484375e+00,\n",
       "       -6.96484375e+00, -4.96484375e+00, -2.96484375e+00, -9.64843750e-01,\n",
       "        1.03515625e+00,  3.03515625e+00, -1.18165386e+00, -1.19838905e+00,\n",
       "       -1.21672213e+00, -1.23656201e+00, -1.25781798e+00, -1.28039896e+00,\n",
       "       -1.30421412e+00, -1.32917225e+00, -1.35518265e+00, -1.40999627e+00,\n",
       "       -1.43861771e+00, -1.46792734e+00, -1.49783456e+00, -1.52824831e+00,\n",
       "       -1.55907762e+00, -1.59023142e+00, -1.62161911e+00, -1.65314937e+00,\n",
       "       -1.71627438e+00, -1.74768722e+00, -1.77887905e+00, -1.80975878e+00,\n",
       "       -1.84023559e+00, -1.87021852e+00, -1.89961660e+00, -1.92833900e+00,\n",
       "       -1.95629454e+00, -2.00954175e+00, -2.03465152e+00, -2.05863070e+00,\n",
       "       -2.08138824e+00, -2.10283351e+00, -2.12287545e+00, -2.14142323e+00,\n",
       "       -2.15838552e+00, -2.17367172e+00,  2.92403150e+00,  2.89891720e+00,\n",
       "        2.87337351e+00,  2.84743404e+00,  2.82113218e+00,  2.79450154e+00,\n",
       "        2.76757526e+00,  2.74038720e+00,  2.71297073e+00,  2.65758610e+00,\n",
       "        2.62968516e+00,  2.60168982e+00,  2.57363343e+00,  2.54554939e+00,\n",
       "        2.51747131e+00,  2.48943281e+00,  2.46146703e+00,  2.43360782e+00,\n",
       "        2.37834239e+00,  2.35100317e+00,  2.32390428e+00,  2.29707932e+00,\n",
       "        2.27056146e+00,  2.24438453e+00,  2.21858191e+00,  2.19318700e+00,\n",
       "        2.16823339e+00,  2.11978388e+00,  2.09635472e+00,  2.07350111e+00,\n",
       "        2.05125594e+00,  2.02965283e+00,  2.00872540e+00,  1.98850715e+00,\n",
       "        1.96903157e+00,  1.95033193e+00,  1.93007386e+00,  1.90086162e+00,\n",
       "        1.86890543e+00,  1.83517706e+00,  1.80064821e+00,  1.76629055e+00,\n",
       "        1.73307562e+00,  1.70197523e+00,  1.67396092e+00,  6.06288433e+00,\n",
       "        6.07324791e+00,  6.07619858e+00,  6.07188845e+00,  6.06046867e+00,\n",
       "        6.04209089e+00,  6.01690722e+00,  5.98506880e+00,  5.94672728e+00,\n",
       "       -6.65117188e+01, -6.45117188e+01, -6.25117188e+01, -6.05117188e+01,\n",
       "       -5.85117188e+01, -5.65117188e+01, -5.45117188e+01, -5.25117188e+01,\n",
       "       -5.05117188e+01, -4.65117188e+01, -4.45117188e+01, -4.25117188e+01,\n",
       "       -4.05117188e+01, -3.85117188e+01, -3.65117188e+01, -3.45117188e+01,\n",
       "       -3.25117188e+01, -3.05117188e+01, -2.65117188e+01, -2.45117188e+01,\n",
       "       -2.25117188e+01, -2.05117188e+01, -1.85117188e+01, -1.65117188e+01,\n",
       "       -1.45117188e+01, -1.25117188e+01, -1.05117188e+01, -6.51171875e+00,\n",
       "       -4.51171875e+00, -2.51171875e+00, -5.11718750e-01,  1.48828125e+00,\n",
       "        3.48828125e+00,  5.48828125e+00,  7.48828125e+00,  9.48828125e+00,\n",
       "       -6.59609375e+01, -6.39609375e+01, -6.19609375e+01, -5.99609375e+01,\n",
       "       -5.79609375e+01, -5.59609375e+01, -5.39609375e+01, -5.19609375e+01,\n",
       "       -4.99609375e+01, -4.59609375e+01, -4.39609375e+01, -4.19609375e+01,\n",
       "       -3.99609375e+01, -3.79609375e+01, -3.59609375e+01, -3.39609375e+01,\n",
       "       -3.19609375e+01, -2.99609375e+01, -2.59609375e+01, -2.39609375e+01,\n",
       "       -2.19609375e+01, -1.99609375e+01, -1.79609375e+01, -1.59609375e+01,\n",
       "       -1.39609375e+01, -1.19609375e+01, -9.96093750e+00, -5.96093750e+00,\n",
       "       -3.96093750e+00, -1.96093750e+00,  3.90625000e-02,  2.03906250e+00,\n",
       "        4.03906250e+00,  6.03906250e+00,  8.03906250e+00,  0.00000000e+00,\n",
       "        1.30000000e+01,  1.50000000e+01,  1.70000000e+01,  1.90000000e+01,\n",
       "        2.10000000e+01,  2.30000000e+01,  2.50000000e+01,  2.70000000e+01,\n",
       "        0.00000000e+00, -1.09648438e+01, -8.96484375e+00, -6.96484375e+00,\n",
       "       -4.96484375e+00, -2.96484375e+00, -9.64843750e-01,  1.03515625e+00,\n",
       "        3.03515625e+00,  0.00000000e+00, -1.19838905e+00, -1.21672213e+00,\n",
       "       -1.23656201e+00, -1.25781798e+00, -1.28039896e+00, -1.30421412e+00,\n",
       "       -1.32917225e+00, -1.35518265e+00, -1.38215435e+00, -1.43861771e+00,\n",
       "       -1.46792734e+00, -1.49783456e+00, -1.52824831e+00, -1.55907762e+00,\n",
       "       -1.59023142e+00, -1.62161911e+00, -1.65314937e+00, -1.68473148e+00,\n",
       "       -1.74768722e+00, -1.77887905e+00, -1.80975878e+00, -1.84023559e+00,\n",
       "       -1.87021852e+00, -1.89961660e+00, -1.92833900e+00, -1.95629454e+00,\n",
       "       -1.98339248e+00, -2.03465152e+00, -2.05863070e+00, -2.08138824e+00,\n",
       "       -2.10283351e+00, -2.12287545e+00, -2.14142323e+00, -2.15838552e+00,\n",
       "       -2.17367172e+00, -2.18719077e+00,  2.89891720e+00,  2.87337351e+00,\n",
       "        2.84743404e+00,  2.82113218e+00,  2.79450154e+00,  2.76757526e+00,\n",
       "        2.74038720e+00,  2.71297073e+00,  2.68535924e+00,  2.62968516e+00,\n",
       "        2.60168982e+00,  2.57363343e+00,  2.54554939e+00,  2.51747131e+00,\n",
       "        2.48943281e+00,  2.46146703e+00,  2.43360782e+00,  2.40588832e+00,\n",
       "        2.35100317e+00,  2.32390428e+00,  2.29707932e+00,  2.27056146e+00,\n",
       "        2.24438453e+00,  2.21858191e+00,  2.19318700e+00,  2.16823339e+00,\n",
       "        2.14375448e+00,  2.09635472e+00,  2.07350111e+00,  2.05125594e+00,\n",
       "        2.02965283e+00,  2.00872540e+00,  1.98850715e+00,  1.96903157e+00,\n",
       "        1.95033193e+00,  0.00000000e+00,  1.90086162e+00,  1.86890543e+00,\n",
       "        1.83517706e+00,  1.80064821e+00,  1.76629055e+00,  1.73307562e+00,\n",
       "        1.70197523e+00,  1.67396092e+00,  0.00000000e+00,  6.07324791e+00,\n",
       "        6.07619858e+00,  6.07188845e+00,  6.06046867e+00,  6.04209089e+00,\n",
       "        6.01690722e+00,  5.98506880e+00,  5.94672728e+00,  0.00000000e+00],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = a.reshape(-1,12,128,9)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(512, 512, 3)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "img.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "a_list = img.flatten().tolist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 车道线绘制"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.6.0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([1., 2.], dtype=float32)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import cv2\n",
    "print(cv2.__version__)\n",
    "\n",
    "a =  np.fromfile(\"/home/users/huajiang.liu/codes/tmp/111_data.bin\", dtype=np.float32)\n",
    "# img = cv2.imread(\"/mnt/data-3/huajiang.liu/tmp/1650507133474_bev_image.png\")\n",
    "# img = cv2.normalize(img,None,0,255,cv2.NORM_MINMAX)\n",
    "# cv2.imshow('img_window',img)  #显示图片,[图片窗口名字，图片]\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/home/users/huajiang.liu/codes/tmp/data/dumpline/NDMFUS_20230626-101648_069_0/dumpfile/dumpfile/1687745790288_right_edge_line.bin\n",
      "-52.87168 -21.774355 199.22833 -5.9804497\n",
      "/home/users/huajiang.liu/codes/tmp/data/dumpline/NDMFUS_20230626-101648_069_0/dumpfile/dumpfile/1687745790288_left_edge_line.bin\n",
      "-63.371735 25.923923 199.22946 0.90799654\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAJDCAYAAACboo/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO2de7hcRZnufy9XISOGQLgTE5DLAYQAWwaOggGUS4YjowInHFERjwgD423EITIHGRyeQcFhQEYuCiLIHQQRgtycQWZG0AQSSAiRBIIQwjUkQBJz/c4fVb2zsrM6e/faXb16dX+/5+lnr65VvVbt3t+uVVVvvVUyMxyn3Vmn7AI4zkDwQHUqgQeqUwk8UJ1K4IHqVAIPVKcSNCVQJV0t6TVJU3PO/Z0kk7R5fD9G0gJJk+Pr7GaUwels1mvSda4BLgWuzSZK2h44DPhTn/yPmNlRTbq30wU0pUY1s98C83JOXQR8C3BVwRkUydqoko4G5pjZlJzTB0iaIuleSbunKoPTOTTr0b8akjYGvk147PflceD9ZvaupLHAncBOOdc4GTgZYMiQIfvuuuuuKYraelYuh0XzYONhsM6aX//ylcZbC5ey6ZANWG8dlVDA5jNp0qQ3zGz4YK6hZmn9kkYCd5vZHpI+CDwELIqntwNeBvYzs1f6fG420GNmb9S7dk9Pj02cOLEp5XRaj6RJZtYzmGskqVHN7Clgi9r7bDBK2gp41cxM0n6E5sebKcrhdA7NGp66EfgdsIuklyR9cS3ZjwGmSpoCXAKMM5/C5fRDU2pUMzu+n/MjM8eXEoayHGfAuDLVaha+Cf91cfjpDBgP1FYz+efwwNnhpzNgypBQJekSSTMlPSlpn2aUoTKMPgE+fm746QyYZtWo1wBH9E2sI6EeSRg33YkwTnpZk8pQDYZsBh/+aviZw7yFS7ni4VnMW7i0xQVrb8qQUI8GrrXAo8BQSVs3oxydwK0TX+Sf732GWye+WHZR2ook46iwuoQqraawbAtk/wovxbS5qcpSJY7t2X61n04gSWcqI6EWnsIn6WRJEyVNfP3115tXuLLpp9c/bMgGfPmjOzJsyAYtLlh7k6rXvyMwCpgSVantgMejKjUHyFYX28W01TCzK82sx8x6hg8flEzcXnivvxBlSKh3AadLugn4S2CBmXXPY7/W2/def0OUIaFOAJ4DZgI/Bv6mGWWoDP30+p18ypBQDTitGfd1ugdXppxK4IHqVIJkEqqk70aJdLKk+yVtE9PdhboWXJnKJ6WEeoGZ7Wlmo4G7WX1M9REzGx1f5zapDB2BK1P5NKsz9dtoRcmmvZ15OwR3og4IV6bySdpGlXSepBeBz7B6jdq9LlRXpgqRNFDN7Cwz2x64Hjg9JtdcqHsBPyS4UNegYyVUV6YK0ape//XApyE0Cczs3Xg8AVi/Nlc1S8dKqD4ftRApF6DIevWPBp6J6VspTqfqSheqK1OFaEpnKkqoY4DNJb0EfAcYK2kXYCXwAnBKzH4McKqk5cBi3IXqDICUEupVdfK6C9VpGFemnErggdpmuDKVTxkSane7UPvBlal8ypBQu9uF2g/H9mzP+CN3dWWqD8lcqGuRUN2FuhZcmcqnDAm1ngu1O/AlfQpRhoQ6IFxCdbK0XEKl212oLqEWouUSKnAX8LnY+9+fbnOhuoRaiDIk1AnAWIILdRHwhWaUwelsypBQ3YW6FuYtXMqtE1/k2J7tveefwZWpNsMH/PNJtkiaUwy3ouTjgdpm1Ab8ndUZ9KO/js5/gaRnopZ/h6ShMX2kpMUZq/Tlg72/0x00o416DWvq/A8Ae5jZnsAfgfGZc7MyVulT6DZcmSrEoAO1js5/v5ktj28fJQzqO+DKVEFa0UY9Cbg5836UpCeAt4F/MLNHWlCG9sGXnSxE0kCVdBawnCChQlj+fISZvSlpX+BOSbv3mWlV+2zvpr0jRoxIWczWUlOmnIZIKaGeCBwFfKZm3jOzJWb2ZjyeBMwCds77fMdq/U4hUq3hfwRhN5RPmNmiTPpwSevG4x0Ik6efS1GGquJWlHyaMTyVt9r0pcB7gQf6DEMdBDwpaTJwG3CKmeVt+9O1uDKVz6DbqA3q/LcDtw/2np2MK1P5uDLVZrgylY9PSnEqQUq7dK6MGs+Nj3bpGZIOb0YZKoMrU4VIaZfOlVEl7QaMA3aPn/lRbSSgK3BlqhApV5y+P/P2UcLiaBBsKTeZ2RLgeUkzgf0IIwedjytThWhVG/Uk4N543N12afdMFSJ5oObIqAP9XGfapZ1CpF6A4kT6yKh0u126H1yZyiel1p8roxLs0uMkbShpFEFG/X2qclQNV6bySWmXHg9sSJBRAR41s1PMbJqkW4CnCU2C08xsRTPK0Qm4MpWPqrAqeU9Pj02cOLHsYjgFkTTJzHoGcw1XppxK4IHaalyZKkQqF+qxkqZJWimpJ5PuLlRXpgrRjM7UNYT5p9dm0qYCnwKuyMk/K65C3Z24MlWIZsxHzZNPpwPE3r6TxT1ThSijjTpK0hOSHpZ0YAn3b2t8wD+fVgdqzYW6N/AN4AZJm+Rl7FYJ1Qf882npDP84Y2pJPJ4kqeZCXWOQ1MyuBK6EMI7aynKWiQ/459PSQJU0HJhnZivchZqPW1HyGXSg1pFP5wE/BIYD90iabGaHE1yo50paRliJ2l2ozoBI5UIFuCMnr7tQnUK4MuVUAg/UVuMSaiFSulBzZdR4rntdqC6hFqJZvf5rGKCM2seFug3woKSdu2ZOqkuohUi5ae90M5uRk73XhWpmzxP2m9qvGeWoBP2Y+1yZyqeMNmp3u1D7wZWpfNp27amOXci3H1yZyqeMGtVdqGuhpkz5rn2rU0agugvVaZiULtRcGdVdqE4RUm7aCzkyasx/HnBeM+7tdAeuTLUaV6YK4YHaalyZKkRKCXWYpAckPRt/bhrTx0hakHGint2MMlSG0SfAx8+tq0z5gH8+KRfyPRN4yMx2Ah6K72s8ktkP9dwmlaEa9KNM+YB/PskW8iVIpWPi8c+A/wD+vhn362R8wD+flG3ULc1sbjx+Bdgyc+4ASVMk3Stp94RlqBw+4J9PSyRUMzNJNYPe48D7zexdSWOBOwmD/qvRrRKqk0/KGvVVSVsDxJ+vAZjZ22b2bjyeAKwvafO+H+5WCdXJJ2Wg3gV8Ph5/HvglgKStFJdQkbRfLIMPKjprJaWEej5wS9wb9QXguJj9GOBUScuBxcC4zLLpjpNLagn10Jy8lxLcAN3JwjfDYP/oE3xnlAZwZarV9KNM+YB/Pm07cbpj6cczVRvwB3zFlAzNaqNeTdim5zUz2yOmDQNuBkYCs4HjzOyt2JG6GBgLLAJONLPHm1GOStDPspM+4J9PGRLqkYRx050I46SXNakMHYEP+OeTzIVKkFB/Fo9/Bvx1Jv1aCzwKDK2NtzpOPcqQUN2F6jRMS3r9cZy0obHSbl3I18mn5RIq7kJ1CtByCTWmf06B/YEFmSaC4+TSrBn+NwK/A3aR9FKUTc8HPi7pWeBj8T3ABMIq0zOBHwN/04wyVIZ+PFM+4J9PGRKqAac1476VpKZMQe54qg/45+PKVKvpR5nyAf98fHdpJzltv7u0pK9KmhoX9P1aTDtH0pyMC3VsyjI4nUGyR7+kPYAvEdY+XQr8WtLd8fRFZnZhqns7nUfKNur/AB4zs0UAkh4mrEDtOA2T8tE/FThQ0maSNibMlqr1EE6X9GRcuGLThGVwOoRkgRp3mP4ecD/wa2AysIIwW2pHYDRhb9Qf5H3eJVQnS9LOlJldZWb7mtlBwFvAH83sVTNbYWYrCQP+uev3d6uE6gP++aTu9W8Rf44gtE9v6DOl75OEJoIT8SV98kk94H+7pM2AZYQFe+dL+qGk0YTZVLOBLycuQ3vRj7nPB/zzSRqoZnZgTtpnU96z7elHQvXdpfNxCbXV+IZohfBAbTX9mPucfMqQUHMX+HWctZEsUPtIqHsBR0n6AGtf4Lfr8eGpfFLWqL0SqpktB2oSaj13qoMPT9UjZRt1KnBeHJ5aTJBQJ7L2BX67Hh+eyidZoJrZdEk1CXUhqyTUbJ7sAr+r0a0L+frwVD4tl1Cp707t+9mulFCdfFouoVLfndr5+GZohSlDQq23wG/n048q5dSnDAn1TXLcqV2Bq1KF8YV8W0k/m6GBj6PWwwO1zfBx1HySPvolfR34v4QpfU8BXwAuBz4KLIjZTjSzySnLUSV8HDWflC7UbYGvALuZ2WJJtwDj4ukzzOy2VPeuMj6Omk/qR/96wEaS1gM2Bl5OfD+nQ0lp7psDXAj8iWDiW2Bm98fT50UX6kWSNkxVBqdzSDl7alPCBJRRwDbAEEknAOOBXYEPAcOos+O0u1CdLCkf/R8Dnjez181sGfAL4H+a2dy4fv8S4Kd0kwt1AMqUD0/lkzJQ/wTsL2njuGXPocD0jM4vwhS/7nGh9rMZGvjwVD1Szp56TNJthG3PlwNPAFcC90oaDogwo+qUVGVoOwagTPnwVD6+7KSTnLZfdtJxmoUHqlMJkgeqpK9HF+pUSTdKeo+kUZIekzRT0s2SfD9FZ62knjhdk1F74ma+6xJk1O8RFvP9AGHm/xdTlsOpPq149PeVUecChwA1rd+dqE6/pPZMrSGjApOA+dFCDb4XqjMAUj/615BRWXO79HqfdQnV6SX1oz9PRv0wYevzmtjQPXuhuoRamNSBmiejPg38O3BMzNM9TlSXUAuT2txXT0a9B7hJ0j/FtKtSlqNtcAm1MC6hOslxCdXpGjxQnUrggepUgtR26V2AmzNJOwBnA0MJi/zWBki/bWYTUpbFqTape/0zCDv0IWldwnjpHQR/v2/c6wyYVj76DwVmmdkLLbyn0yG0MlDHATdm3vvGvc6AaUmgxvmmnwBujUn9btzbkVq/S6iFaVWNeiTwuJm9CjCQjXs7Uut3CbUwrdoQ7Xgyj31JW2c2nOiejXtdQi1McglV0hDC5JQdzGxBTLuO8Njv3bg3E7hr4BJqtWmGhJq8RjWzhcBmfdK6e+Nep2FcmXIqgQeqUwlSW1F2kTQ583pb0td8416nUVKb+2aY2WgzGw3sCywiSKi+ca/TEGVJqL5xr9MQZUmovnGv0xBlSai9WBjIXWMw1yVUl1CzlCKhMoCNe11CdQk1SykSKqs27j2fbrJLu4RamLIk1M2AW4ARxI17zWxevWu4hFptqiyhdu/GvU4hXJlyKoEHqlMJUkuoQyXdJukZSdMlHSDpHElzMrLq2JRlcDqD1G3Ui4Ffm9kxcSx1Y+Bw3IHqNEjK3aXfBxwEnAhgZkuBpWFRP8dpjJSP/lGEBSZ+KukJST+JQ1XgDlSnQVIG6nrAPsBlZrY3sJAwS6pfByq4hOoS6uqkDNSXgJfM7LH4/jZgn4E4UMElVJdQVyflXqivSHpR0i5xaZ9Dgae71oEKLqEOgqQSqqTRwE+ADYDnCGtOXUIDDlRwCbXqtL2EamaTgb4FdAeq0zCuTDmVwAPVqQSt2LQ3T0Z1F6rTEK2oUWsy6q7AXsB03IXqNEjqSSk1GfUqCDKqmc3HXahOg6SuUevJqO5CdRoidaDWk1F7cRfq6riEmk/qQM2VUXEXat0sLqHmk3rAP1dGjS93oebgEmo+rXCh5smo6+Au1K6h7SVUqCujgrtQnQZwZcqpBB6oTiVohYQ6W9JT0XE6Maa5E9VpiFatPXWwmb3RJ82dqM6A8Ue/UwlaEagG3C9pkqSTM+nuRHUGTCsC9SNmtg9hjdTTJB1Et+6F6hQmeaCa2Zz48zXCRhP7de1eqK71Fyb1NL8hkt5bOwYOA6bWdP5I9zhRXesvTOpe/5bAHXEZn/WAG8zs15Kui9JqrxM1cTnaA9f6C5Nc628GrvVXm2Zo/T485VQCD1SnEiRXpiTNBt4BVgDLzaxH0jDgZmAkoY16nJm9lbosTnVpVY16cNwTtdZOcReq0xBlPfrdheo0RFkSqrtQnYZoxeypj5jZHElbAA9IeiZ70sxMUq4LFTgZYMSIES0optPOlCKh0q0uVJdQC1OKhMqqvVChm1yoLqEWpiwJ9Q/ALZK+SHShJi5He+ASamFcQnWS4xKq0zV4oDqVoBUu1HXjSn53x/fXSHo+40AdnboMTvVpxTjqVwmL926SSTvDzG5rwb2dDiH18NR2wF8R1p5ynMKkfvT/K/AtYGWf9POiA/UiSRsmLoPTASQLVElHAa+Z2aQ+p8YDuwIfAoYBf1/n8+5CdXpJWaN+GPhEnI96E3CIpJ+b2VwLLAF+SjftheoSamGSBaqZjTez7cxsJDAO+I2ZnZDR+EWY3tcdDlRwCXUQtGrtqSzXSxoOCJgMnFJCGcrBJdTCuITqJMclVKdr8EB1KkEZEuooSY9JminpZkkbpC6DU31aUaPWJNQa3yMs4vsB4C3giy0og1NxWiqhxiGpQwgbo4E7UJ0B0moJdTNgvpktj+9fArZNXAanAyhDQh3o511CdXppqYQKXAwMlVQTGrYD5uR92CVUl1CztFpC/Qzw78AxMVv3OFDBJdRBUIaE+vfATZL+CXgCuKqEMpSDS6iFcQnVSY5LqE7X4IHqVILUA/7vkfR7SVMkTZP0jzHdnahOQ6TuTC0BDjGzdyWtD/ynpHvjOXeiOgMmaaBa6Km9G9+uH1/t33tz2o5WzZ6aTFha8gEzeyyecieqM2BasT7qCjMbTVCh9pO0BwNworqE6mRpWa/fzOYTVKkjBuJEdQnVJdQsqXv9wyUNjccbAR8HnulaJ6pLqIVJ3evfGviZpHUJ/xS3mNndkn7TlU5Ul1AL4xKqkxyXUJ2uwQPVqQRlSajuRHUaInWNWpNQ9wJGA0dI2h93ojoNkjRQ41hpnoTqTlSnIVouoQKzcCeq0yAtl1AJ0mm/uITqZClDQj2AAThRXUJ1CTVLGRLqdLrVieoSamHKklCfphudqC6hFsYlVCc5LqE6XYMHqlMJUi6Str2kf5f0dJRPvxrTz5E0J+NAHZuqDE7nkLIztRz4OzN7XNJ7gUmSHojnLjKzCxPe2+kwkgWqmc0F5sbjdyRNxxUopyAtaaNKGgnsDdQcqKdHB+rVkjZtRRmcatMKrf8vgNuBr5nZ28BlwI6E2VRzgR/U+ZxLqE4vqZWp9QlBer2Z/QLAzF6N+v9K4Mf4Xqir4RJqPil7/SIoTtPN7F8y6Vtnsn2SbnGggkuogyBlr//DwGeBp+I0P4BvA8fHRdEMmA18OWEZ2guXUAvjEqqTnGZIqGUsje4MgDufmMMF983g5fmL2WboRpxx+C789d7dO7rngdqG3PnEHMb/4ikWL1sBwJz5ixn/i6cAujZYXetvQy64b0ZvkNZYvGwFF9w3o6QSlU/q4al6ev8wSQ9Iejb+9EH/DC/PX9xQejeQukat6f27AfsDp0naDTgTeMjMdgIeiu+dyDZDN2oovRtIbZeea2aPx+N3CDaUbYGjCTZpcLv0Gpxx+C5stP66q6VttP66nHH4LiWVqHxa1pnqo/dvGSetALwCbNmqclSBWofJe/2raEmg9tX7g2gVMDOTtMZgrqSTgZMBRowY0Ypipmfhm0GVGn0CDNksN8u8hUu5deKLHNuzfVcHZl9aMSllDb0feDWzmO/WhMUpVqMjtX6XUAuTtEatp/cDdxFs0ufTTXZpl1ALk1RClfQR4BHgKWBlTP42oZ16CzACeAE4zszm1buOS6jVpu0lVDP7T8Ly53kcmvLeTmfhypRTCTxQnUqQWkK9WtJrkqZm0twu7TRM6hr1GuCInPSLzGx0fE1IXAanA0gtof4WqNubd5yBUlYb1e3STkOUEajda5d2F2phWh6oXW2Xdgm1MC23okjaOjNzqrvs0i6hFia11n8jMAbYXNJLwHeAMV1rlx6yGXz4q2vNMmzIBnz5ozu2qEDVIbWEenxOcncsg+40FVemnErggepUgjIkVHegOg1ThoTqDlSnYcqQUN2B6jRMGW1Ud6A6DVNqZ8qCDybXC+MSqkuoWcoI1H4dqOASqkuoq1PGan7d6UAFl1AHQWoXaq+ECrxKkFDvpAEHKrgLtepUwYWaJ6GCO1CdBnFlyqkEHqhOJShtaXRJs4F3gBXA8sG2YZzOpuw1/A82szdKLoNTAfzR71SCMgPVgPslTYproTpOXcoM1I+Y2T7AkYS1/Q/KnnQJ1SXULKUFqpnNiT9fA+6gjxvVJVSXULOU0pmSNARYx8zeiceHAeeWUZaW4hJqYcrq9W8J3BHX8l8PuMHMfl1SWVqHu1ALU0qgmtlzwF5l3NupJj485VQCD1SnEpQWqJKOkDRD0kxJbvBz1kopgSppXeDfCGOouwHHxz1SO58nb4GL9oBzhoafT95SdokqQVk16n7ATDN7zsyWAjcR3KmdzZO3wK++AgteBCz8/NVXPFgHQFmBui2QHdF+KaZ1Ng+dC8v6bGW+bHFId9ZK23amOlJCXfBSv+kuoeZTVqDOAbLSy3YxrZeOlFDfs0l++vu26z10CTWfspSpPwA7SRpFCNBxwP8pqSyt49Bz4N5vwcplq9LW3wgOPbv3rUuo+ZSlTC2XdDpwH7AucLWZTSujLC3lQyfBhn8R2qQLXgo16aFnw57H9WZxCTWf0mb4x/2lum+PqT2PWy0wnYHRtp0px8nigepUgpYHqu+F6hShrDbqRWZ2YUn3diqIP/qdSuB7oTqVIEmgSnpQ0tSc19H4Xqh1Xagun9YnSRvVzD42kHySfgzcXecaVwJXQlh2snmlK5GaCxVyvVM1+RTwQf8++F6oraQfF6rLp/VJupBv7g2l6wiP/d69UDOBm4sv5Ftt2n4h3zzM7LOtvqdTfXx4yqkEHqhOJUgWqJKOlTRN0kpJPX3OjY/u0xmSDk9VBqdzSNlGnQp8CrgimxjdpuOA3YFtgAcl7WxmKxKWxak4yWpUM5tuZjNyTh0N3GRmS8zseWAmfVbyc5y+lNFG7U4HqjMoBhWo/Uilg8IlVCfLoNqoA5VK+9CvAzVe2yVUp5ey9kK9QdK/EDpTOwG/L6Ecrccl1MIkC1RJnwR+CAwH7pE02cwON7Npkm4BngaWA6d1TY+/n4V83YFan2SBamZ3ENbmzzt3HnBeqns7nYcrU04l8EB1KkGqGf658qmkkZIWZxyol6e4v9N5pGqj5sqnkVlmNjrRfZ0OJZUVZTpA3J7HcQZNGW3UUZKekPSwpANLuL9TQQoHakH5dC4wwsz2Br5BGPjPXTTUJVQnS+FHfxH51MyWAEvi8SRJs4CdgTUMUS6h+sB/lpZKqJKGA/PMbIWkHQjy6XOtLEOpuIRamCSBWk8+BQ4CzpW0DFgJnGJm81KUoS1xCbUwqXr9ufKpmd0O3J7ink5n48qUUwk8UJ1KkNKFeoGkZ+KqfXdIGpo55y5UpyFS1qgPAHuY2Z7AH4HxsIYL9QjgR3FvVMepS0oX6v1mtjy+fZRgOQF3oToFaFUb9STg3njsLlSnYZK7UCWdRbCcXN/gtV1CdXpJ6kKVdCJwFHCorVrf0l2o4BJqg6Q09x0BfAv4qJktypxyF6pLqA2TbCFfSTOBDYHac+5RMzslnjuL0G5dDnzNzO7Nv0rAF/KtNm29kK+ZfWAt59yF6jSEK1NOJfBAdSpBKhdqrnzqLlSnKKlq1Fz5NDLLzEbH1ymJ7u90GEkCdS3yqeMUohVt1Kx8Cu5CdQqQ1IWaI5+6C9Ul1EIkc6HmyafuQnUJtSipzH258qm7UF1CLUoSCbWefCrp08C5QM2F+h0z+1V/13MJtdq0rYRaTz51F6pTFFemnErggepUgpQu1O9GCXWypPslbRPTJemS6EJ9UtI+qcrgdA4pa9QLzGzPuGjv3UAcl+FIQm9/J+Bk4LKEZXA6hJQu1Lczb4cAteGFo4FrLfAoMFTS1qnK4XQGSVfzk3Qe8DlgAXBwTK7nQp2bsixOtUnqQjWzs8xse4KEenqD13YJ1emlVXuhXg9MAL6Du1DDsUuoDZHShbqTmT0b3x4NPBOP7wJOl3QT8JfAAjPrjse+S6iFSdlGPV/SLgSp9AWgNkl6AjCWsJTPIuALCcvQXvhCvoVJ6UL9dJ10A05LdV+nM3FlyqkEHqitxHv9hfFAbSW1Xv/kn+eervX6b534Yu75biZlr/+7hN7+SuA14EQze1nSGOCXwPMx6y/M7NxU5WgrvNdfmJRrT21Sk1ElfQXYLU6eHgN808yOGui1fOJ0tWnGxOkytH7HaZgytH6AAyRNAV4m1K7TUpbDqT5laP2PA+83s70Iu/vdWefaXaf1g/f86zGoQDWzj5nZHjmvX/bJej3w6fiZt83s3Xg8AVhf0uY5177SzHrMrGf48OGDKWb70E+vH7znX4+Wa/2StgJeNTOTtB/hn6V+FdNJ9NPrB+/516MMrf8Y4FRJy4HFwDhLNfTQbvSj9YPr/fUoQ+u/FLg01X2dzsSVKacSeKA6lSB5oEr6O0lW69m7XdopQtJAlbQ9cBjwp0yy26Wdhkldo15EWNUv26t3u7TTMClXSjkamGNmU/qc6t5Ne12ZKsyghqckPQhslXPqLODbhMd+0WufTGgaMGLEiKKXaS/6caGCO1HrkcQuLemDwChgiiQIlujHoxLVvXZpV6YKk2p91KeALWrvJc0GeszsDUnda5d2ZaowSaf51aF77dJOYVoSqGY2MnPsdmmnYVyZciqBB6pTCcqQUMdIWpDZuPfs/q7hOGVIqACPZDbu7Q6rNPiA/yAoQ0LtXtyKUpiUVpReCTUO+mfpTheqD/gXZlALUAxEQjWzBX0G/DcBVprZu5LGAheb2U45185KqPu+8MILhcvplEszFqBItcXkB4GHCAP6EGTSl4H9zOyVPnlnE4O43vV8pZRq085bTK5NQu1eF6pTmDIk1O51oTqFacmAv5mNrD3azexSM9vdzPYys/3N7L9bUYaq4MNT+bgy1Wb48FQ+ZTz6nbXgw1P5pLSinCNpTkYqHZs5Nz66UGdIOjxVGdqOAShTtfmow4Zs0MKCtT+pa9SLzOzCbIKk3YBxwO7ANsCDknY2sxWJy1I+A7CiOPmU8eg/GrjJzJYAz0uaCewH/K6EsrSWAShTTj6pO1Onx0Umrpa0aUzrXtz12OsAAA7aSURBVBdqzYoyZLO1ZvOe/5qkXMj3MmBHYDRh5+gfNHjtzlvId4B4z39NWrJpr6QfA3fHt93rQh0gx/Zsz6KlK1i0dDnzFi71jhVpe/3Z1U8+CUyNx3cB4yRtKGkUYWmf36cqRxUZNmQDNt5gXS5+aKbXqpGUnanvSxpNmIs6G/gygJlNk3QL8DSwHDitK3r8DZIdT523cCm3TnyRY3u279raNeVCvp9dy7nzgPNS3bsTyPr7r3h41hqrp3Rb8LqEWgGO7dme8Ufuuppa1bfDlTdS0EmjBy6htpKFb4ZB/9En9DtElSVv9ZS+UmvemlWdtI5VkkCVdA7wJaA2rvRtM5sgaSQwHZgR0x81s1PWuECn0kRlqm/w5s0R6KR5Aylr1DXk08gsMxud8L7tS0JlKq/W7aR1rPzR30oGsEiak0/KzlSefAowStITkh6WdGDC+7cfA5g95eRTOFALyqdzgRFmtjfwDeCG6ErNu37nSagD8PU7+RR+9BeRT+OMqSXxeJKkWcDOwBoW046UUH32VGGSPPrryaeShktaNx7vQJBPn0tRhraj4NCUE0jVmcqVT4GDgHMlLSPskXqKmc1LVIb2widND4pUvv5c+dTMbgduT3HPtscf+4PCJdRW4I/9QeOB2gq8tz9oUq+P+reSnpE0TdL3M+nd40Jd+CYsXQgfPdMf+4Mg5cTpgwlGvr3MbHfgwpiedaEeAfyoNhLQkUz+OTz8PdhgY3/sD4KUEuqpwPlx7BQzey2md5cL1TtRTSHlo39n4EBJj0W59EMxvTtcqDW5FAbkPHXWTsq9UNcDhgH7Ax8CbomD/AO9drX3QvVx06aSzIUq6VTgF3FJyd9LWglsTre4UP2R31RSPvrvBA4GkLQzsAHwBp3sQs3OjhrgYhPOwEjZmboauFrSVGAp8PlYu3auC9Uf98lI6UJdCuQ+9zrOhVpTnnaOCxb6477p+Az/omRlUa9Jk+OB2h/ZgIT84PSOU3JSboj2t4TtzlcA95jZt9rOhVpvski92hLyg9O9UMlJZZfOyqdLJG2ROd0+LtR6j+z+aksPzpaTqkatJ5+2F/Ue2WurLT04SyHVOGo9+RTayYVab6zTx0DbjsI1akH5tOZCfVPSvsCdknY3s7dzrl9tCdVpKklcqPXkUzN7nW52oTqFSfXoz5VPu9qF6gyKVJ2pXPlUUve6UJ1BkcqFmiufdrUL1RkUbu5zKoEHqlMJUpr7bs7sgzpb0uTMue5xoTpNIeU0v/9dO5b0A2BBPO7evVCdwiR/9EsScBxwY0zqdaGa2fNAzYXqOHVpRRv1QOBVM3s2vu8OF6rTVJK5UM3sl/H4eFbVpo1c2yVUp5eke6FKWg/4FLBvJrk7XKhOU0n96P8Y8IyZvZRJ61wXqpOM1FaUcfR57PteqE4RkgaqmZ1YJ72zXKhOclyZciqBB6pTCVKZ+24GdolvhwLzzWx027lQncqQappfrnwaaR8XqlMZknamMvLpISnv43Q+qduofeVTaCcXqlMZkrhQ1yKfugvVKUSyvVDz5NOu3wvVKUzKR/8a8qm7UJ2ipOxMrSGf0s17oTqDIuUM/xNz0tyF6hTClSmnEnigOpUgpQt1tKRHowt1oqT9YrokXRJdqE9K2idVGZzOIWWN+n3gH6NcenZ8D3Akobe/E2Gc9LKEZXA6hJSBasAm8fh9wMvx+GjgWgs8CgyVtHXCcjgdQMrhqa8B90m6kPAP8T9jej0X6tyEZXEqTsq9UA8Fvm5mt0s6DriKIAIM9NouoTq9KKy1m+DC0gJgaFxuUsACM9tE0hXAf5jZjTHfDGCMmdWtUXt6emzixDVUVqciSJpkZj2DuUbKNurLwEfj8SFAbQbVXcDnYu9/f0IA+2PfWSsp26hfAi6Ok1P+THyMAxOAsYSlfBYBX0hYBqdDSCmh/ierLzxRSzfCRmmOM2BcmXIqgQeqUwk8UJ1KUIbWP0bSgsxq1Gf3dy3HSdnrr2n990oaG9+PieceMbOjEt7b6TDK0Podp2HK0PoBDpA0hRC83zSzaQnL4XQAZWj9jwPvN7N3Y5PgTsKUv77Xdq3f6aXlWn9OvtlAj5m9Ue9arvVXm0pq/ZK2ioFLHAlYB3gzYTmcDqAMrf8Y4FRJy4HFwDhLVa07HUMZWv+lwKWp7ut0Jq5MOZXAA9WpBCkl1L0k/U7SU5J+JWmTzDnftNdpiJQ16k+AM83sg8AdwBmwxqa9RwA/qi2c5jj1SBmoOwO/jccPAJ+Ox75pr9MwKQN1GiEoAY5l1baSvmmv0zApJdSTgEsk/T+CoW9pg9d2CdXpJemmvcBhAJJ2Bv4qpvmmvU7DpOz1bxF/rgP8A3B5POWb9joNk7KNerykPwLPEHT/n0LYtBeobdr7a3zTXmcAJJs91Ux89lS1affZU47TNDxQnUqQJFDryaeSRkpanHGgXt7ftRwH0tWoufJpZJaZjY4v31naGRCpArWefOo4hUgVqPXkU/BNe50CJNm0l/ryqW/a6xQi2aa95MinvmmvU5RUvf5c+dQ37XWKkqqNmiufEjbtfVLSZOA2fNNeZ4AkcaGa2cXAxTnpvmmvUwhXppxK4IHqVIJBBaqkYyVNk7RSUk+fc7lOU0lHxLSZks4czP2d7mGwNepU4FOsUqGA+k7T2OP/N8LGvbsROl27DbIMThcwWCvKdIC45lmWXqcp8LykrNN0ppk9Fz93U8z79GDK4XQ+qdqo9Zym7kB1CtFvjbo2qdTMftn8IvXet1dCBZZImpqTbXMgb13Vdkpvp7I0mt6sa++Sk9YYZjboF/AfhMV4a+/HA+Mz7+8DDoiv++rlW8v1J1Y1vZ3K0m5lb+SV6tFfz2n6B2AnSaMkbUDocN2VqAxOBzHYBSg+CfwQGA7cI2mymR1uZtMk1Zymy8k4TSWdTqhh1wWuNt9owhkIg62SW/ECTq5qejuVpd3K3sirEnZpx3EJ1akGzXo8N/tFaMM+Adwd318DPA9MBhYBv43puwDvEiZkLwC+G9Ovi2mL4+tygiXmd/HzSwh7Xm0A/Et8/+da3niNnxPcCUsI3q9NgXOAhcCymHdszDss5nk2k3c28FQs88TM73YEMIOw5OaZOb/7OYT1uCbH3/kFYCVxZIVg75kW016M1zocuCKmLQbmE/oAABcAr8Xf4x3gUzH9kkz+t4FrY/p3CcNMtfyHxfQx8TueQ9iZ8fyYrnitN2L6IZm/We36i4HrMr/j+Pj7zwAO7y8e2rlG/SowvU/aGcC1hE3UavaV7xI6axsCNwMnSNofWAF80cw2Imx1uTewJ+GLP4kw5rcDwTqzEviRmb0H2AI4JEq76xAC/FngIaA2N+Ea4C8JjtoJMe1M4CEz26lP3oMtOG57ABqQkS8ys9HAWIJbIitTT43fxSLgOKJMDfwX8HT8na8AXo/5ZxBsQJsA1wNXxXJcmcn/D/F6EP5B/gC8J+a5LnPvP8T7/wm4MKYdCXwQmAS8QvjHqPGMmW0UX5+N30HDizm3ZaBK2o5gX/lJn1PDsulxv6pDCF8+wA3AZoT/agg1JMD68fUGsA9wm5m9AzwZr/cucUXBmD6doJjty6o/0s+Av47HzwN9J3wfHfP0zduX/YgyspktBWoyci5mNt3MZvRNA/Yi1JLLbNWCyO9ksj1KWCkRwqhMTdK+j1C77Rd/7xpDWPW9HUaoXY3wnW0oaet4bnfgW5m8td9945i+BHhfJn8eDS/m3JaBCvwr4Zde2Sf9B8AI4FRC2TcjPOIsugbuAZaY2WMx/3mSao/B3wCzgPlmtlzSSGBHwhcMcLqkJ+Ow2j7AY8CWrKqVXonvAU4H7gW2lbRpTNvSzOb2yWvA/ZImRaUNBi4j18pzdeYeWbYl+s8y19mK6PIl/DM/l8lbu+dJwB8z99xZ0lJCjXpPJv8Rkl4EPkP4h94W+DAwlPBU24JVitM+wJ/MbEp8/3Lm+rvERUdeknRAg9/BKspui+a0z44iPIYhtIlqbdTPEh5vGxJWAZxBeHzPzHx2d0ItsQewNaHttCGhpn0O+Ajhv/cvCI+pLxEeY1sS2sTvJTwiH4rXmw+MBKbG929l8o4i1Gi1duD8Pr/HW8C28XgLYArBinMMIYgejPd+kdAO/nN8vUCo0d+Nx6/Fay2MZZ8cP/dmzD8z8/7F+NlX4+eXEYKsdu5VQpNpHuGpMC3mn0qoOVfE/G/H72sq4Z9uafy+F2XyL4vpk+Pnno/pS2NZv0GoCDYhVCo3EbYZhbDP2AmZ7+oq4Ji1xkXZgZkTqP9M+A+bHb+kRYROTTZ9Xvxyro9f8HrxswcQ2pPf7HPNMfGLPiPmvz9+kb2SLqFpcB+hzVsLzBnAh+IfYGtgRuaaI+P5bN6t4/FqeW1VB+mbNCgjx/tMJV+mfo5VHayaTH0iocO4ce0zMe+tmfT7gAP63GdEDLAeQvv2+Ez6EuBgwj/N7PhaHl9HE5oSr2fSlwF75vweSwmVS67EXqlAzQmwWo1aCwIRjIEz4/tfAifF4x8TapijCLXr0Jj/h4Qa5aj4ZU6I+S8H/iYG1rWEJsfXCe0nCJ2C78VAORP4fqYcIwm1bzbvmfH4TOAi4L3x/RDgvwkdh/VigI0ijDhMAXbv83tvnTn+OqE26huotafHAfFazxE6KE8T2qQ7ENrdwwiTe/5MeLzW8q5LaBeum/lHWhzzf4nQtBGhuTUv5tmKVUuVvkyoOERo59fyzwUej3n2zOS/iPCPoFj2KYSnXW95OiVQf0MY6plKGP65N6YfGb+A2vDUP8b0x+IX/2fCI/yfCI9+Y9Xw1HzgE4SmhMX8C+I9xhKMiEviuT8DXyF0ruYTao2V8Q/2RUJ7+SFCjf4gYZRhSnxNI8w2q/1eYwntxFnZ9Mz56+Lv+iRhjsTLsRyvEmqfT8YgqdVqC+P3MJdVw2aLMt/RzFjm2hDcPTH9d6wakpsPfD6m305oLiwhNAOOjOmnx99lSjxXSxdhJGMWodY8NKb/PnP9ecD/yvyOZ8X8M2rXWdvLlSmnErRrr99xVsMD1akEHqhOJfBAdSqBB6pTCTxQnUrggepUAg9UpxL8f84is/wP7xMMAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 144x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import os\n",
    "\n",
    "def get_files(input_path, stamp, show_mode):\n",
    "    pns = []\n",
    "    for filepath,dirnames,filenames in os.walk(input_path):\n",
    "        for filename in filenames:\n",
    "            if \"all\" in show_mode:\n",
    "                 if stamp in filename:\n",
    "                    pns.append(os.path.join(filepath,filename))\n",
    "            else:\n",
    "                if (stamp in filename) & (show_mode in filename):\n",
    "                    pns.append(os.path.join(filepath,filename))\n",
    "    return pns\n",
    "\n",
    "def draw_lane(line_array):\n",
    "    point_num = int(len(line_array) / 2)\n",
    "    xs = line_array[0:point_num]\n",
    "    ys = line_array[point_num : 2*point_num]\n",
    "    print(xs[0], ys[0], xs[-1], ys[-1])\n",
    "    plt.scatter(ys,xs,s=1)\n",
    "    plt.xlim(30, -20)\n",
    "    plt.ylim(-30, 100)\n",
    "    xticks = np.arange(-50,50,5)\n",
    "    yticks = np.arange(-100,150,5)\n",
    "    plt.xticks(xticks)\n",
    "    plt.yticks(yticks)\n",
    "#     plt.plot(ys, xs, \"o\", c = \"b\")\n",
    "def draw_obs(x, y):\n",
    "    plt.plot(y, x, \"o\",markeredgewidth=1)\n",
    "def draw_junction(line_array):\n",
    "    point_num = int(len(line_array) / 2)\n",
    "    xs = line_array[0:point_num]\n",
    "    xs = np.append(xs,xs[0:1])\n",
    "    ys = line_array[point_num : 2*point_num]\n",
    "    ys = np.append(ys,ys[0:1])\n",
    "    plt.plot(ys, xs,'r-')\n",
    "\n",
    "def main():\n",
    "    stamp = 1687745790288\n",
    "    dumpfile = \"/home/users/huajiang.liu/codes/tmp/data/dumpline/NDMFUS_20230626-101648_069_0/dumpfile\"\n",
    "    # show_mode = \"all\", \"_-2_\",\"_-1_\",\"_0_\",\"_1_\",\"_2_\",\n",
    "    # \"_*_left_\",\"_*_right_\"，\"junction\"， \"\n",
    "    # \"edge_line\", \"left_edge_line\",\"right_edge_line\",\n",
    "    show_mode = \"edge_line\"\n",
    "    line_files = get_files(dumpfile, str(stamp),show_mode)\n",
    "    junc_files = get_files(dumpfile, str(stamp),\"junction\")\n",
    "    plt.figure(figsize=(2,10))\n",
    "    for line_file in line_files:\n",
    "        print(line_file)\n",
    "        line =  np.fromfile(line_file, dtype=np.float32)\n",
    "        draw_lane(line)\n",
    "    for junc_file in junc_files:\n",
    "        line =  np.fromfile(junc_file, dtype=np.float32)\n",
    "        print(line)\n",
    "        draw_junction(line)\n",
    "    #把需要校验的障碍物放进去\n",
    "    draw_obs(x=21.6571, y=-8.44525)\n",
    "#     draw_obs(x=-5.20422, y=-6.76526)\n",
    "    draw_obs(0, 0)\n",
    "main()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 耗时分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 2160x1440 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import re\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def getinfo(file):\n",
    "    msgs = []\n",
    "    f = open(file,\"r\",encoding='utf-8')   #设置文件对象\n",
    "    lines = f.readlines()\n",
    "    for i in range(len(lines)):\n",
    "        line = lines[i]\n",
    "        line = line[:-1]     #去掉换行符，也可以不去\n",
    "        if \"obs-map time diff:\" in line:\n",
    "#             print(line)\n",
    "            time = re.search(\"obs-map time diff:-?\\ *[0-9]+\\.?[0-9]*(?:[Ee]\\ *-?\\ *[0-9]+)?\",line).group()\n",
    "            time=float(time.split(\":\")[-1])\n",
    "            if time > 1000000:\n",
    "                continue\n",
    "            msgs.append([time])\n",
    "    f.close() #关闭文件\n",
    "    return np.array(msgs)\n",
    "\n",
    "def draw_res(array):\n",
    "    fig = plt.figure(figsize=(30,20))\n",
    "    time = array\n",
    "    x = [i for i in range(len(array))]\n",
    "\n",
    "    # create figure and axis objects with subplots()\n",
    "    fig,ax = plt.subplots()\n",
    "    \n",
    "    # make a plot\n",
    "    ax.plot(x, time, color=\"red\", marker=\"o\",linewidth=1.0,ms=3.0)\n",
    "    # set x-axis label\n",
    "    ax.set_xlabel(\"stamp\",fontsize=20)\n",
    "    # set y-axis label\n",
    "    ax.set_ylabel(\"time\",color=\"red\",fontsize=20)\n",
    "    plt.show()\n",
    "times = getinfo(\"/mnt/data-3/huajiang.liu/codes/matrix-v3/log/traj_log_log20230705-140255.9790\")\n",
    "draw_res(times)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "271.0"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "times.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
